//定义关于counter的store
import {defineStore} from 'pinia'

/*defineStore 是需要传参数的，其中第一个参数是id，就是一个唯一的值，
简单点说就可以理解成是一个命名空间.
第二个参数就是一个对象，里面有三个模块需要处理，第一个是 state，
第二个是 getters，第三个是 actions。
*/
const useCounter = defineStore("counter",{
    state:() => ({
        jwt:null,
        token:"",
        userId:null,
    }),
    
    getters: {

  	},

  	actions: {

  	}
})

//暴露这个useCounter模块
export default useCounter

export const parseJwt = (token) => {
    try {
      // 1. 检查 token 是否为空或无效
      if (!token) return null;
  
      const base64Url = token.split('.')[1]; // 获取 JWT 的 payload 部分
      if (!base64Url) return null;
  
      // 2. 将 Base64URL 转换为标准 Base64
      const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  
      // 3. 清理非法字符，并填充等号
      const cleanedBase64 = base64.replace(/[^A-Za-z0-9+/=]/g, '');
      let paddingLength = 4 - (cleanedBase64.length % 4);
      paddingLength = paddingLength % 4; // 确保填充长度不超过4
      const paddedBase64 = cleanedBase64 + '='.repeat(paddingLength);
  
      // 4. 解码为二进制字符串，并转换为 UTF-8 字符串
      if (typeof window !== 'undefined') { // 确保在浏览器环境中运行
        const binaryString = window.atob(paddedBase64);
        const bytes = new Uint8Array(binaryString.length);
        for (let i = 0; i < binaryString.length; i++) {
          bytes[i] = binaryString.charCodeAt(i);
        }
        const decoder = new TextDecoder('utf-8');
        const decodedString = decoder.decode(bytes);
  
        // 5. 解析 JSON 数据
        return JSON.parse(decodedString);
      } else {
        // 如果不在浏览器环境中，可以使用 Buffer 解码（Node.js）
        const buffer = Buffer.from(paddedBase64, 'base64');
        return JSON.parse(buffer.toString('utf-8'));
      }
    } catch (error) {
      console.error('Failed to parse JWT:', error);
      return null;
    }
  };
